#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
using namespace std;

//class Solution {
//public:
//    int pivotIndex(vector<int>& nums) {
//        int n = nums.size();
//        vector<long long>f(n);
//        for (int i = 0; i <= n - 1; i++)
//        {
//            if (i == 0) f[i] = 0;
//            else f[i] = f[i - 1] + nums[i - 1];
//        }
//        vector<long long>g(n);
//        for (int i = n - 1; i >= 0; i--)
//        {
//            if (i == n - 1) g[i] = 0;
//            else g[i] = g[i + 1] + nums[i + 1];
//        }
//        for (int i = 0; i <= n - 1; i++)
//        {
//            if (f[i] == g[i]) return i;
//        }
//        return -1;
//    }
//};

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n=nums.size();
        vector<int>f(n),g(n),answer(n);
        for(int i =0;i<n;i++)
        {
            if(i==0)f[i]=1;
            else f[i]=f[i-1]*nums[i-1];
        }
        for(int i=n-1;i>=0;i--)
        {
            if(i==n-1)g[i]=1;
            else g[i] = g[i+1]*nums[i+1];
        }
        for(int i=0;i<n;i++)
        {
            answer[i]=f[i]*g[i];
        }
        return answer;
    }
};

int main()
{
    Solution s;
    vector<int> nums = { 1,2,3,4 };
    //cout<<s.pivotIndex(nums) << endl;
    vector<int>answer = s.productExceptSelf(nums);
    for (auto& e : answer)
    {
        cout << e << " ";
    }
    cout << endl;
	return 0;
}